/**
 * 动弹
 * Created by atearsan on 2016-01-05.
 *
 * -2016年 1月 5日 星期二 11时16分58秒 CST
 * -有点困   刚才不小心看了以前代码中得随手日记  时间跨度啊   逝去的青春
 */
function getTweetReplyList(tweetId, pageIndex, pageMax) {
    //console.info("pageIndex:" + pageIndex + ',pageMax:' + pageMax);
    // $.getJSON("/action/api/tweet_list?pageIndex=1&pageSize=20&uid="+g_user.id)

    // 到最后一页了
    if (Number(pageIndex) == Number(pageMax)) {
        console.info(commentsArr);
        return;
    }

    $.ajax({
        url: "http://www.oschina.net/action/api/comment_list?id=" + tweetId + "&catalog=3&pageIndex=" + pageIndex + "&pageSize=20&uid=" + $uid,
        dataType: 'text',
        success: function (data) {
            /*
             <comments>
             <comment>
             <id>8158640</id>
             <portrait></portrait>
             <author><![CDATA[imdan]]></author>
             <authorid>2312595</authorid>
             <content><![CDATA[@节操已卸载 自己都说还是挺漂亮的，是不是觉得性格或什么不喜欢？大差不差就行了，谈了赶紧结婚吧，婚过去了都那样。]]></content>
             <pubDate>2016-03-11 22:20:24</pubDate>
             <appclient>3</appclient>
             </comment>
             </comments>
             */
            // 替换xml中不符合xml规范的字符
            var xml = data.toString().replace('<?xml version="1.0" encoding="UTF-8"?>', '');
            xml = xml.replace('<!-- 总动弹数 -->', '');
            xml = xml.replace(/<!\[CDATA\[/g, '');
            xml = xml.replace(/]]>/g, '');

            // 解析comment标签, 转成json
            $(xml).find("comments > comment").each(function (i) {
                //console.info('comment:' + this.outerHTML);
                try {
                    // 将comment的xml数据转成json对象
                    //commentsArr.push($.xml2json(this.outerHTML));     // 添加到数组末尾(时间倒序)
                    commentsArr.unshift($.xml2json(this.outerHTML));    // 添加到数组开头(时间升序)
                } catch (err) {
                    // 含有特殊字符的会解析失败
                    //console.error("[OscPlugin] xml2json转换失败:" + err);
                    var comment = {};
                    comment.id = $(this).find("id").html();
                    comment.portrait = $(this).find("portrait").html();
                    comment.author = $(this).find("author").html();
                    comment.authorid = $(this).find("authorid").html();
                    comment.content = $(this).find("content").html();
                    comment.pubdate = $(this).find("pubdate").html();
                    comment.appclient = $(this).find("appclient").html();
                    //commentsArr.push(comment);
                    commentsArr.unshift(comment);
                }
            });

            getTweetReplyList(tweetId, ++pageIndex, pageMax);
        }
    });
} // #END getTweetReplyList

/**
 * 解析回复中的'@'
 */
function atParser() {
    // 如果回复的内容中有@xx, 就追加'查看对话'的操作
    $('#TweetReplies .post .referer').each(function (i) {
        var x = $(this).parent().next().append('<a href="javascript:;" class="oscplugin_more_reply">查看对话</a>');
        var reply_from = $(this).prev().prev().text();
        var reply_to = $(this).text().substring(1); // @xxx 去掉@符号
        x.find(".oscplugin_more_reply").click(function () {
            var replyListDocument = $(this).parent().next();
            //debugger;
            if (replyListDocument.length == 0) {
                $('.oscplugin_tweet_replylist').remove();
                searchReplyList(reply_from, reply_to, x);  // 事件监听
            } else {
                $('.oscplugin_tweet_replylist').remove();
            }
        });
    });
} // #END atParser

/**
 * 检索对话列表
 * @param replyFrom 发起对话的人
 * @param replyTo   被@的人
 * @param documentClicked
 */
function searchReplyList(replyFrom, replyTo, documentClicked) {// 给'查看对话'绑定事件
    //console.log('reply_from:' + replyFrom + ", reply_to:" + replyTo);
    var replyListArr = commentsArr.filter(function (element, index, array) {
        if (replyFrom != tweetAuthor) {         // 其他人发起评论
            if (replyTo == tweetAuthor) {       // 回复动弹主题
                if (element.author == replyFrom) {
                    if (element.content.indexOf('@') == -1 || element.content.indexOf(tweetAuthor) > -1) {
                        return element;
                    } else {
                        // 回复的第三方
                    }
                } else if (element.author == tweetAuthor) {
                    if (element.content.indexOf(replyFrom) > -1) {
                        return element;
                    }
                }
            } else {                            // 回复其他人
                if (element.author == replyFrom) {
                    if (element.content.indexOf(replyTo) > -1) {
                        return element;
                    } else {
                        // 回复的其他人
                    }
                }
            }
        } else {// if(replyFrom == 动弹er) {      // 查看动弹er和其他人对话
            if (element.author == tweetAuthor) {
                if (element.content.indexOf(replyTo) > -1) {
                    return element;
                } else {
                    // 回复的其他人
                }
            } else {
                if (element.author == replyTo) {
                    if (element.content.indexOf(tweetAuthor) > -1) {
                        return element;
                    } else if (element.content.indexOf('@') == -1) {
                        return element;
                    }
                }
            }
        }
    });

    appendToHTMLDocument(replyListArr, documentClicked);
} // #END searchReplyList

/**
 * 把对话列表添加到html
 * @param replyListArr
 * @param documentClicked 当前点击的元素
 */
function appendToHTMLDocument(replyListArr, documentClicked) {
    var htmlTextTemplate = '<li style="border-bottom: 0px">{0} [{1}]: {2}</li>';

    var htmlText = '<ul style="border: 1px dashed #40aa53" class="oscplugin_tweet_replylist">';
    replyListArr.forEach(function (item, index, array) {
        htmlText += htmlTextTemplate.format(item.author, item.pubdate, item.content);
    });
    htmlText += '</ul>';
    $(documentClicked).parent().append(htmlText);
}

/**
 * 评论数据的数组对象
 * @type {Array}
 */
var commentsArr = [];

/**
 * 动弹作者
 */
var tweetAuthor;

function main() {
    //这里嵌套使用了setTimeout，原因是跳转是一个事件，
    // 并不会打断当前脚本的执行（而添加script元素会立刻执行），因此需要让后面的语句等待事件处理完毕。
    // 思路来源: http://www.keakon.net/2011/11/02/%E5%9C%A8Chrome%E6%8F%92%E4%BB%B6%E4%B8%AD%E8%AE%BF%E9%97%AE%E5%8E%9F%E5%A7%8B%E7%BD%91%E9%A1%B5%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F
    setTimeout(function () {
        location.href = "javascript:document.body.setAttribute('data-uid', g_user.id);";
        setTimeout(function () {
            $uid = document.body.getAttribute('data-uid');

            var urlArr = location.pathname.split('/');
            var tweetId = urlArr[urlArr.length - 1];
            var pageMax = $(".pager .next").prev().text(); // 根据next位置获取最大的页数
            if (pageMax == '') { // 没有next (最后一页或者只有一页不显示next)
                pageMax = $(".pager .current").text() || 1; // 最大的页数
            }
            getTweetReplyList(tweetId, 0, pageMax);
        }, 0);
    }, 1000);
    atParser();
    tweetAuthor = $('.user').text();
    // http://www.cnblogs.com/xiao-hong/p/3194027.html
}

/**
 * 给string添加format方法
 * @returns {string}
 */
String.prototype.format = function () {
    var args = arguments;
    return this.replace(/\{(\d+)\}/g,
        function (m, i) {
            return args[i];
        });
}
main();

/*
 随手备份之前的代码  动弹列表
 var xml = data.toString().replace('<?xml version="1.0" encoding="UTF-8"?>', '');
 xml = xml.replace('<!-- 总动弹数 -->', '');
 xml = xml.replace(/<!\[CDATA\[/g, '');
 xml = xml.replace(/]]>/g, '');
 //xml = xml.replace(/[<!\[CDATA\[]|[\]\]]/g, '');
 xml = xml.replace(/<body>/g, '<bodyx>');
 xml = xml.replace(/<\/body>/g, '<\/bodyx>');
 //console.info(xml);
 /*
 <?xml version="1.0" encoding="UTF-8"?>
 <oschina>
 <tweetCount>500</tweetCount> <!-- 总动弹数 -->
 <pagesize>20</pagesize>
 <tweets>
 <tweet>
 <id>7389731</id>
 <portrait>http://static.oschina.net/uploads/user/47/94055_50.jpg?t=1368438906000</portrait>
 <author><![CDATA[atearsan]]></author>
 <authorid>94055</authorid>
 <body><![CDATA[一天过去了 又没抢到票 下班算了]]></body>
 <attach></attach>
 <appclient>1</appclient>
 <commentCount>0</commentCount>
 <pubDate>2015-12-16 18:01:31</pubDate>
 <imgSmall></imgSmall>
 <imgBig></imgBig>
 <likeCount>0</likeCount>
 <isLike>0</isLike>
 <likeList>
 </likeList>
 </tweet>
 *
 $(xml).find("tweets > tweet").each(function (i) {
 var id = $(this).children("id").text();
 var author = $(this).children("author").text();
 var body = $(this).children("bodyx").text();

 console.info('id:' + id + ', author:' + author + ', body:' + body);
 //console.info(author);
 //console.info(body);
 });
 */